iT邦幫忙

2023 iThome 鐵人賽

DAY 10
1
Cloud Native

帶著MBP在異世界探險的科技宅系列 第 10

Day 10 網管經驗篇 - 這樣找問題快多了

  • 分享至 

  • xImage
  •  

嗨各位,不知道各位有沒有維運服務備份說過 XXX 壞了,幫我看一下 的經驗呢?
在不用網管系統 (NMS,好比 LibreNMS) 的情況下,我們通常最直覺的方式就是去 ping 特定的主機或是直接看特定連接埠(Port)的服務吧?
而今天要講的是我用來初步排查網路問題的腳本 network.sh

首先前情提要,在幾個月前,我們實驗室機房的網路大致分為 8樓機房7樓庫房
(7樓也是有放主機,不過大部分放在8樓)

而某天,神奇(弔詭)的事情發生了
我的 做AI大師 夥伴和我反應說

誒 Vincent , 我的某臺機器連 VPN 可以連到,可是直接從七樓連不到誒

而想必此時螢幕前聰明的你,從我前幾句的前情提要就能推導出
(我當時在處理這件事情時沒有想到這裡)

  1. 8樓機房7樓庫房 之間有拉網路線
  2. 7樓實驗室的AP 直連到 7樓庫房 後再上去 8樓機房

說老實我一開始也覺得很納悶,干嘛餒?
但後來測試後發現確實如此就開始納悶
為了不讓人有覺得我在水字數的嫌疑
我就直接講結論了,是我們在 7樓庫房 的其中一台Switch 往生了
而這也是我產生了想要做快速排查腳本的原因

一來是我一次要檢查的主機數量不少
(NAS*2 VPN*1 PVE_Host*12 ...)

再來是,想要快速檢查主機是否可被存取通常是使用 Ping(ICMP) 來檢查目標主機是否有回覆
但這忽略掉了一件事情,也就是網路拓墣圖

於是乎,我寫了一個用來快速排查實驗室服務狀態的腳本
(下面全部服務不可用是因為我現在不在實驗室沒連 VPN,不是實驗室被隕石砸了)
圖: 腳本執行結果
https://ithelp.ithome.com.tw/upload/images/20230910/20115660UOpR8851rx.png

這個腳本對於我(維運人員)的好處在於

  1. 我能快速地去看每台主機的狀態
  2. 因為有了位置資訊,所以我能夠針對不同情境去對網路快速除錯(好比切VPN看機器狀態)

而在寫這份腳本時,我也挖到了一些有趣的東西
我相信應該身邊大部分會說 shell script 很簡單的人都沒想過能這樣用
圖: 變數
https://ithelp.ithome.com.tw/upload/images/20230910/20115660MTROk2yUta.png
圖: 迴圈
https://ithelp.ithome.com.tw/upload/images/20230910/201156606ELDQrA5qo.png

對了,如果你覺得這份 shell script 可能會幫到你,我之後會把它開源在 HBFS 這份專案下

這份腳本大部分的人應該大部分都看得懂
少部分看不懂的地方大概就是

${!host}

在大部分的程式語言的變數都是一對一的鍵(key)值(value)的關係
shell script 在做變數解析時,可以做的事情是用 key 解析出的 value 再做一次 key-value 轉換取值
(簡單來說就是俄羅斯套娃的概念)

而這也是 bash 中的 Indirect References
參考資料: Advanced Bash-Scripting Guide: Chapter 28. Indirect References

回到腳本
當最外圈的 for迴圈 在每次的 loop 時,每次 loop 中都會有 host 變數
而 host 的值依序為: gw、cs、NAS173...

而這時,我們再用 host 變數解析出來的 value (gw、cs、NAS173)
當作 key 再進行解析,也就達到了可以同時儲存主機名稱和IP的目的

以上就是我在機房維運的過程中發現 shell script 的奇淫怪招分享給各位
好了,我們明天見


上一篇
Day 9 網管經驗篇 - 我只是想快速裝一個 Kubernetes 叢集
下一篇
Day 11 單體式架構
系列文
帶著MBP在異世界探險的科技宅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言